import { clone } from 'es-toolkit';

/**
 * @desc: 删除数组中的指定字段，主要用于删除树形结构中不需要的字段，主要是parentId字段，其他也可以自定义值
 * @param {*} data<array> 数据源
 * @param {*} name<string> 字段名
 * @param {*} children 如果数组中存在children字段，则递归删除children字段
 */
export function removeTreeFields(
  data: any[],
  name = 'parentId',
  children: any = 'children'
) {
  data.forEach(item => {
    if (item[name] || item[name] == 0) {
      delete item[name];
    }
    if (children && item[children]) {
      removeTreeFields(item[children], name, children);
    }
  });
  return data;
}

// 获取操作人，新建或修改时设置该值
export function getOperator(ctx: any) {
  return ctx.session.userInfo.userName;
}

// 获取操作人Id，新建或修改时设置该值
export function getUserId(ctx: any) {
  return ctx.session.userInfo.userId;
}

// 克隆
export function deepClone(obj: any) {
  return clone(obj);
}

// 生成uuid
export function getUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    const r = (Math.random() * 16) | 0;
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

export function getTimeFormat(date = new Date()) {
  // 获取年份
  const year = date.getFullYear();

  // 获取月份，注意月份从0开始，需要加1，并且补0
  const month = String(date.getMonth() + 1).padStart(2, '0');

  // 获取日期，补0
  const day = String(date.getDate()).padStart(2, '0');

  // 获取小时，补0
  const hours = String(date.getHours()).padStart(2, '0');

  // 获取分钟，补0
  const minutes = String(date.getMinutes()).padStart(2, '0');

  // 获取秒钟，补0
  const seconds = String(date.getSeconds()).padStart(2, '0');

  // 拼接成指定格式
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
